<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 创建对象

  // 单例模式：单例实例
    // 字面量：const obj = {};
    // 构造内置函数：const obj2 = new Object();
  


    
  // 工厂模式：

  // 自定义工厂模式
  // function createObj(name, age){
  //   // 原料
  //   const obj = {};
  //   // 加工
  //   obj.name = name;
  //   obj.age = age;
  //   // 出厂
  //   return obj;
  // }
  // const o1 = createObj("admin", 20);
  // const o2 = createObj("root", 30);
  // console.log(o1)
  // console.log(o2)
  // console.log(o1 === o2)

  // 新版的工厂模式
  // 内置的工厂模式（构造自定义函数）
  function CreateObj(name, age){
    this.name = name;
    this.age = age;
  }
  // const o1 = new CreateObj("admin", 20);
  // const o2 = new CreateObj("root", 20);
  // console.log(o1);
  // console.log(o2);
  // console.log(o1 === o2);

  console.log( CreateObj );

  CreateObj();






  // new的原理
  // 1. 创建一个新对象
  // 2. 改变原函数的this指向，指向这个新对象
  // 3. 
  // 4. 执行原函数
  // 5. 检测原函数是否主动返回对象，如果没有，那就将新对象（this）设置为返回值


  
</script>
</html>